Guest virtual machines may be operable to run on a physical machine in a virtualized environment. In such a virtualized environment, it may be desirable to have a near real-time backup of a memory and/or processor state of a guest virtual machine, for example to operate as a fail-over spare or to create multiple checkpoints of the guest virtual machine for debugging purposes. The operation of the guest virtual machine may be divided into one or more epochs. An epoch may be a unit of time in which one or more operations are completed in order to allow a guest virtual machine to perform operations, and to allow a checkpoint of the memory state of the guest virtual machine to be created and transmitted to a standby node. One epoch may begin and end, and a checkpoint may be created at the standby node, before a subsequent epoch may begin. The process of executing a new epoch only after the end of a previous epoch is known as a sequential execution of epochs.
One problem associated with the above-described guest virtual machine operation is that each epoch contains a significant amount of time where the guest virtual machine is in a paused state. While the guest virtual machine is in a paused state, the guest virtual machine cannot execute further operations. Executing the epochs sequentially means that the guest virtual machine has a set amount of time in each epoch to execute operations, and a set amount of time in each epoch to checkpoint the epoch and update the standby node. Sequential pipelining therefore presents a significant disadvantage in terms of processing power and processor administrative overhead.
In view of the foregoing, it may be understood that there are significant problems and shortcomings associated with current epoch pipelining technologies.